package com.shopping.mall.core.module.goods.service;

import com.shopping.mall.base.http.Result;
import com.shopping.mall.core.module.goods.entity.Goods;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shopping.mall.core.module.goods.vo.GoodsVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * <p>
 * Goods服务类
 * </p>
 *
 * @author zzy
 * @date 2021-08-13
 */
public interface GoodsService extends IService<Goods> {

    /**
     * 获取随机商品
     *
     * @param n
     * @return
     */
    Result<Object> getRandomGoods(Integer n, HttpServletRequest request);

    /**
     * 按type查询(筛选)商品,分页返回
     *
     * @param typeId:    商品id
     * @param current：页码
     * @param size：每页条数
     * @param text:      搜索信息
     * @return
     */
    Result<Object> filtrateByType(String typeId, Integer current, Integer size, String text, HttpServletRequest request);

    /**
     * 管理员按type查询(筛选)商品,分页返回
     *
     * @param typeId:    商品id
     * @param current：页码
     * @param size：每页条数
     * @param text:      搜索信息
     * @return
     */
    Result<Object> filtrateByTypeAdmin(String typeId, Integer current, Integer size, String text);

    /**
     * 按type查询(筛选)商品,不分页
     *
     * @param typeId
     * @param text:  搜索信息
     * @return
     */
    Result<Object> filtrateByType(String typeId, String text, HttpServletRequest request);

    /**
     * 商品信息
     *
     * @param id
     * @param request
     * @return
     */
    Result<Object> goodsInfo(String id, HttpServletRequest request);

    /**
     * 分页查询
     *
     * @param current：页码
     * @param size：每页条数
     * @param goods：筛选条件
     * @return IPage<Goods>
     */
    IPage<Goods> getGoodsPage(Integer current, Integer size, Goods goods);

    /**
     * 查询所有
     *
     * @param goods：筛选条件
     * @return List<Goods>
     */
    List<Goods> getAll(Goods goods);

    /**
     * 添加商品
     *
     * @param goods
     * @return
     */
    Result<Object> add(Goods goods);

    /**
     * 商品和规格一起添加
     *
     * @return
     */
    Result<Object> addGoodsWithSpecification(GoodsVo goodsVo);

    /**
     * 修改商品信息
     *
     * @param goods
     * @return
     */
    Result<Object> changeGoods(Goods goods);

    /**
     * 修改商品status
     *
     * @param goods
     * @return
     */
    Result<Object> changeGoodsStatus(Goods goods);

    /**
     * 通过id删除
     *
     * @param id：goodsId
     * @return Result<Object>
     */
    Result<Object> deleteById(String id);

    /**
     * 批量删除
     *
     * @param ids：id列表
     * @return Result<Object>
     */
    Result<Object> batchDelete(List<String> ids);
}
